import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class CardClient {
    public static void main(String[] args) {
        // 创建socket连接
        try (Socket socket = new Socket("192.168.158.54", 4444);
             // 由系统标准输入设备构造BufferedReadder对象
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
             // 由Socket对象得到输出流，并构造PrintWriter对象
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

             // 客户端本地输入流
             BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) {

            System.out.println("请输入操作类型（消费/充值），卡号和金额，格式：类型 卡号 金额");
            String userInput;
            Gson gson = new Gson();
            while ((userInput = stdIn.readLine()) != null && !userInput.equalsIgnoreCase("quit")) {
                // 对输入信息按照标准格式处理
                String[] parts = userInput.split(" ");
                if (parts.length == 3) {
                    try {
                        String type = parts[0];
                        String cardNumber = parts[1];
                        double amount = Double.parseDouble(parts[2]);

                        Transaction transaction = new Transaction();
                        transaction.type = type;
                        transaction.cardNumber = cardNumber;
                        transaction.amount = amount;
                        //转为json字符流
                        String json = gson.toJson(transaction);
                        out.println(json);

                        // 接收服务端的响应并打印
                        String response = in.readLine();
                        System.out.println("服务器响应: " + response);

                    } catch (NumberFormatException e) {
                        System.out.println("金额需要是数字，请重新输入");
                    }
                } else {
                    System.out.println("输入格式不正确，请按照'类型 卡号 金额'的格式输入");
                }
            }
        } catch (Exception e) {
            System.out.println("无法连接到服务器");
            e.printStackTrace();
        }
    }


    /**
     * 交易信息
     */
    static class Transaction {
        String type; // 消费或充值 交易类型
        String cardNumber; // 卡号
        double amount; // 金额
    }
}
